perm filename PURGE.SAI[VV,BGB] blob
sn#127028 filedate 1974-12-06 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "PURGE"
C00005 00003 ⊃ This is the magic macro which defines good files
C00008 00004 ⊃ CAMERA CALIBRATION
C00011 00005 ZZ(TOWER,NUL), ⊃ TOWER OF HANOI PROGRAMS
C00015 00006 ⊃ AJT FILES
C00018 00007 ⊃ Now we use the magic macro to generate our tables
C00020 00008 ⊃ This routine types the commands
C00022 00009 ⊃ This routine outputs the illegal file names.
C00025 00010 ⊃ Now we get down to business
C00027 ENDMK
C⊗;
BEGIN "PURGE"
LET DEFINE=REDEFINE;
STRING ARRAY UFD_FILE, UFD_EXT[1:1000];
INTEGER UFDLENGTH;
DEFINE DSK="1", LPT="2", CRLF="('15&'12)", ⊃="COMMENT";
⊃ make CVXSTR honest;
SIMPLE STRING PROCEDURE CVXX(INTEGER VAL);
BEGIN STRING FOO;
INTEGER I;
FOO ← CVXSTR(VAL);
FOR I ← LENGTH(FOO) STEP -1 UNTIL 1 DO IF FOO[I FOR 1]≠" " THEN DONE;
RETURN(IF I THEN FOO[1 FOR I] ELSE "");
END;
⊃ read ufd file;
SIMPLE PROCEDURE UFDREAD;
BEGIN INTEGER EOF, SIXBIT, FLAG;
OPEN(DSK,"DSK",8,2,0,128,EOF,EOF);
LOOKUP(DSK,"SYS HE.UFD[1,1]",FLAG);
IF FLAG THEN USERERR(0,0,"UFD LOOKUP ERROR");
UFDLENGTH ← 0;
WHILE TRUE DO
BEGIN
SIXBIT ← WORDIN(DSK);
IF EOF THEN DONE;
IF SIXBIT THEN
BEGIN
UFD_FILE[UFDLENGTH←UFDLENGTH+1] ← CVXX(SIXBIT);
UFD_EXT[UFDLENGTH] ← CVXX(WORDIN(DSK) LAND
'777777000000);
END ELSE WORDIN(DSK);
WORDIN(DSK);
WORDIN(DSK);
END;
CLOSE(DSK);
END;
DEFINE EXT_LENGTH="25";
PRELOAD_WITH "SAI","FAI","MAC","F4","REL","DMP","","LST","WRU",
"PUB","FND","TRP","DAT","???","TXT","HDR","SEG","LNK","RUN","AUX",
"DOC","CMD","GUN","HAL","TRJ","YEL";
SAFE STRING ARRAY COMMON_EXT[0:EXT_LENGTH];
DEFINE SAI="1", FAI="2", MAC="4", F4="'10", REL="'20", DMP="'40", NUL="'100",
LST="'200",WRU="'400",PUB="'1000",FND="'2000",TRP="'4000",
DAT="'10000",CAL="'20000",TXT="'40000",HDR="'100000",SEG="'200000",
LNK="'400000",RUN="'1000000",AUX="'2000000",DOC="'4000000",
CMD="'10000000",GUN="'20000000",HAL="'40000000",TRJ="'100000000",
YEL="'200000000", BIT(I,A)="MORE_EXT[I] LAND A";
DEFINE NULLIND="6"; ⊃ INDEX OF NULL EXT.;
⊃ This is the magic macro which defines good files;
DEFINE XX="
⊃ KKP FILES;
⊃ EDGE FOLLOWER;
ZZ(DD,FAI+REL), ⊃ DUMMY RAID TO FORCE SYMBOLS;
ZZ(INNER,SAI+REL), ⊃ EDGE FOLLOWER INSIDE EDGE SCANNER;
ZZ(EDGE,SAI+REL+DMP), ⊃ EDGE FOLLOWER MAIN PROGRAM;
ZZ(MISEDG,SAI+REL), ⊃ EDGE FOLLOWER UTILITY ROUTINES;
ZZ(CONTRL,SAI+REL), ⊃ EDGE FOLLOWER CONTROL PROGRAM;
ZZ(SCANER,SAI+REL), ⊃ EDGE FOLLOWER ACCOMODATION ROUTINES;
⊃ CURVE FITTER;
ZZ(CURVE,SAI+REL+DMP), ⊃ CURVE FITTER MAIN PROGRAM;
ZZ(MISCUR,SAI+REL), ⊃ CURVE FITTER UTILITY PROGRAMS;
ZZ(CURFAI,FAI+REL), ⊃ CURVE FITTER FAIL ROUTINES;
⊃ HAND/EYE MONITOR;
ZZ(HE,SAI), ⊃ HAND/EYE MONITOR (DUMP ON [1,3]);
ZZ(HEINIT,FAI+REL), ⊃ FAIL CODE FOR HE;
ZZ(DOHE,NUL), ⊃ COMPILES, LOADS, AND SAVES HE ON SYS;
⊃ OBJECT SEGMENTER - BY G. GRAPE;
ZZ(PROTO,GUN), ⊃ PROTOTYPE FILE FOR GUNLO;
ZZ(GUNLO,SAI+REL+DMP), ⊃ SEGMENTER;
ZZ(SAIDIS,SAI+REL), ⊃ DISPLAY PACKAGE;
ZZ(SAVRES,SAI+REL), ⊃ FILE HANDLING;
ZZ(SAISER,SAI+REL), ⊃ SERVICE;
ZZ(FORSER,SAI+REL), ⊃ MORE SERVICE;
ZZ(GUNFAI,FAI+REL), ⊃ FAIL SERVICE;
ZZ(SCENE,SAI+REL), ⊃ CROSS REFERENCE;
ZZ(LINE,SAI+REL), ⊃ LINE FITTING;
ZZ(LINVER,SAI+REL), ⊃ LINE DATA STRUCT.;
ZZ(PROT,SAI+REL), ⊃ PROTOTYPE STRUCT.;
ZZ(MAPS1,SAI+REL), ⊃ PARSING;
ZZ(MAPS2,SAI+REL), ⊃ MAPPING;
ZZ(SUBRS,DOC), ⊃ SUBROUTINE LISTING AND XREF;
ZZ(STRUCT,DOC), ⊃ DATA STRUCTURE DOCUMENTATION;
ZZ(COMAND,DOC), ⊃ COMMAND DOCUMENTATION;
⊃ UTILITY PACKAGE AND DRIVER - ON UDP;
⊃ ZZ(IIDRV,SAI+DMP+WRU), ⊃ NEW DRIVER FOR UTILITY PACKAGE;
⊃ ZZ(HEUTIL,SAI+WRU), ⊃ HAND/EYE UTILITY ROUTINES;
⊃ ZZ(RUNII,NUL), ⊃ DO FILE FOR RUNNING IIDRV;
⊃ ZZ(HEMACR,NUL), ⊃ MACROS FOR UTILITY ROUTINES;
⊃ CAMERA CALIBRATION;
ZZ(CAMERA,SAI+DMP+WRU), ⊃ CAMERA CALIBRATION PROGRAM;
ZZ(SOBMAT,SAI+REL), ⊃ CAMERA UTILITY ROUTINES;
ZZ(DATA,NUL), ⊃ CALIBRATION DATA FOR CAMERA;
ZZ(DATA2,NUL), ⊃ CALIBRATION DATA FOR NEWCAM;
⊃ EDGE VERIFIER;
ZZ(VERIFY,SAI+DMP), ⊃ LINE VERIFIER;
⊃ SHY FILES (OBS. ON UDP)
⊃ ZZ(OP1,MAC+REL), ⊃ SOBEL OPERATOR;
⊃ ZZ(AFD,SAI+DMP+LNK+RUN),⊃ DRIVER FOR FOCUS PROGRAM;
⊃ ZZ(GILFOC,SAI+DMP), ⊃ FOCUS PROGRAM;
⊃ ZZ(GILEYE,SAI+DMP), ⊃ CORNER FINDER PROGRAM;
⊃ ZZ(TVSER,SAI), ⊃ FILE COMMON TO AFD,GILFOC,GILEYE;
⊃ ZZ(STKDRV,SAI+DMP), ⊃ ?????;
⊃ ZZ(CALDRV,SAI+DMP), ⊃ ?????;
⊃ ZZ(HANDSE,SAI), ⊃ FILE COMMON TO STKDRV AND CALDRV;
⊃ ZZ(CAL,LNK+RUN), ⊃ RUN CONTROL FILES FOR CALDRV;
⊃ ZZ(STK,LNK+RUN), ⊃ RUN CONTROL FILES FOR STKDRV;
⊃ ZZ(NEWCAM,SAI+DMP), ⊃ NEW CAMERA CALIBRATION PROGRAM;
⊃ TOB FILES replaced by AJT - ON UDP;
⊃ ZZ(COLOR,SAI+DMP), ⊃ COLOR RECOGNIZER;
⊃ LOU FILES;
ZZ(MATRIX,FAI+REL), ⊃ MATRIX ARITH. UTILITY ROUTINES;
ZZ(VECT,FAI+REL), ⊃ VECTOR ARITH. UTILITY ROUTINES;
ZZ(SAILIB,SAI+REL), ⊃ ARM UTILITY ROUTINES;
ZZ(HANDY,SAI+DMP), ⊃ ARM CONTROL PROGRAM;
ZZ(HANDB,SAI+DMP), ⊃ ARM CONTROL PROGRAM;
ZZ(INTFAC,FAI+REL),
ZZ(YELLOW,SAI+DAT), ⊃ ARM TESTING PROGRAM;
ZZ(BLUE,SAI+DAT), ⊃ ARM TESTING PROGRAM;
ZZ(WAVE,SAI),
ZZ(MOVE,SAI+DMP),
ZZ(MODEL,SAI+DMP), ⊃ MODEL BUILDER;
ZZ(VECTOR,SAI), ⊃ VECTOR DECLARATIONS;
ZZ(HASH06,FAI+REL),
ZZ(UNDER,FAI+REL), ⊃ ARM UTILITY ROUTINES;
ZZ(DRIVE,FAI+REL),
ZZ(YELO,DMP),
ZZ(ARM,NUL),
ZZ(ARMSOL,NUL),
ZZ(TRAJ,SAI),
ZZ(THROW,SAI),
ZZ(TOWER,NUL), ⊃ TOWER OF HANOI PROGRAMS;
ZZ(NLF,SAI+DMP+YEL+TRJ),
ZZ(HANOI,NUL+HAL+TRJ),
⊃ RPO FILES - ON UDP (OBSOLETE);
⊃ ZZ(SIMPLE,SAI+DMP), ⊃ SIMPLE BODY RECOGNIZER;
⊃ ZZ(SIMAUX,SAI), ⊃ REST OF SIMPLE;
⊃ ZZ(DPDP,F4+REL), ⊃ SIMPLE UTILITY ROUTINES;
⊃ ZZ(MODELS,TRP), ⊃ SIMPLE'S PROTOTYPES;
⊃ ZZ(COMPLX,NUL), ⊃ COMPLEX FILES;
⊃ ZZ(CPXSYM,AUX),
⊃ ZZ(RECOG,SAI+AUX+DMP+CMD), ⊃ RECOGNIZER;
⊃ ZZ(RECOG0,SAI),
⊃ ZZ(RECOG1,SAI),
⊃ ZZ(RECOG2,SAI),
⊃ ZZ(RECOG3,SAI),
⊃ ZZ(RECDPY,SAI+HDR),
⊃ ZZ(RECCOM,AUX),
⊃ ZZ(SEGMEN,SAI+AUX+DMP+CMD), ⊃ SEGMENTER;
⊃ ZZ(SEG0,SAI),
⊃ ZZ(SEG1,SAI),
⊃ ZZ(SEG2,SAI),
⊃ ZZ(SEGDPY,SAI+HDR),
⊃ ZZ(SEGCOM,AUX),
⊃ ZZ(PREDIC,SAI+AUX+DMP+CMD), ⊃ PREDICTOR;
⊃ ZZ(PRED0,SAI+FAI+AUX),
⊃ ZZ(PRED1,FAI),
⊃ ZZ(PRED2,FAI),
⊃ ZZ(PRED3,FAI),
⊃ ZZ(PRED4,FAI),
⊃ ZZ(PRED5,FAI),
⊃ ZZ(PRECOM,AUX),
⊃ WAP FILES;
⊃ ZZ(WALDSK,SAI+DMP),
⊃ ZZ(WALEYE,SAI+DMP),
⊃ ZZ(WALDRV,SAI+DMP),
⊃ ZZ(WAL,CMD),
⊃ ZZ(WEC,CMD),
⊃ ZZ(LINE,FND),
⊃ ZZ(IMAGE,SAI),
⊃ AJT FILES;
ZZ(COLOUR,SAI+DMP), ⊃ NEW COLOUR PROGRAM;
ZZ(PROTO,SAI), ⊃ DISPLAYS GUNNAR PROTO FILES;
⊃ ZZ(BLK0,DAT), ⊃ PICTURE FILES FOR STEREO;
⊃ ZZ(BLK1,DAT),
⊃ ZZ(BLK2,DAT),
⊃ ZZ(BLK3,DAT),
⊃ GENERAL FILES maintained by KKP;
ZZ(WHLTST,SAI+DMP), ⊃ COLOR WHEEL TEST PROGRAM;
ZZ(DACTST,SAI+DMP), ⊃ DAC TEST PROGRAM;
ZZ(SERTST,SAI+DMP), ⊃ TSERVO TEST PROGRAM;
ZZ(TBLTST,SAI+DMP), ⊃ TURNTABLE TEST PROGRAM;
ZZ(POTCAL,SAI), ⊃ POT CALIBRATION ROUTINE;
ZZ(APPLY,SAI+DOC+DMP+PUB), ⊃ OPERATOR TESTING PROGRAM;
ZZ(FLIST,SAI+DOC+DMP), ⊃ FILE LISTER ;
ZZ(PREAMB,SAI+TXT), ⊃ GLOBAL MODEL DEFINITIONS;
ZZ(EDGCUR,PUB+DOC), ⊃ EDGE FOLLOWER DOCUMENTATION;
ZZ(HAND,WRU), ⊃ HAND/EYE MONITOR DOCUMENTATION - I;
ZZ(MESSAG,WRU), ⊃ DITTO - PART II;
ZZ(MONITR,WRU), ⊃ DITTO - PART III;
ZZ(MACROS,NUL), ⊃ LOAD MACROS FOR II SYSTEM;
ZZ(PURGE,SAI+DMP), ⊃ THIS PROGRAM;
ZZ(GLORPG,NUL), ⊃ COMPILE FILE FOR ALL HE PROGRAMS;
ZZ(SAIRPG,NUL), ⊃ COMPILE FILE FOR OTHER SAIL PROGRAMS;
⊃ ZZ(GLBNEW,SEG), ⊃ SAVE SEGMENT FOR II (OBS. ON UDP);
ZZ(EDGLIB,REL), ⊃ LIBRARY FOR EDGE AND CURVE;
ZZ(PREMAK,SAI+DMP), ⊃ GENERATES COMMENTLESS PREAMBLE FILE;
⊃ ZZ(CALPLT,SAI+DMP), ⊃ PLOTTER DUMP ROUTINE FOR EDGE POINTS;
⊃ ZZ(PLOTS,FAI+REL), ⊃ SPECIAL SAILABLE CALCOMP ROUTINES (UDP);
ZZ(CAMDRV,NUL+DMP), ⊃ NEW CAMERA MOVER;
ZZ(DPYSUB,HDR), ⊃ DISPLAY HEADER FILE;
⊃ ZZ(SQRT,FAI+REL), ⊃ SQUARE ROOT ROUTINE;
ZZ(SAITRG,NUL+FAI+REL), ⊃ SAIL TRIG FUNCTIONS - HEAD AND TEXT;
⊃ ZZ(HASH,FAI+REL), ⊃ HASH CODER FOR MAKING NEW SEGMENT;
ZZ(PICTUR,SAI), ⊃ PICTURE INPUT PROGRAM;
ZZ(SPICT,SAI+DMP), ⊃ STEREO INPUT PROGRAM;
ZZ(HESLOG,NUL), ⊃ HAND/EYE LOG MESSAGES;
ZZ(GCREF,FAI+DMP) ⊃ GLOBAL CREF PROGRAM;
⊃ ZZ(MAKSEG,SAI+DMP) ⊃ MAKE A NEW GLOBAL SEGMENT (OBS. ON UDP);
";
DEFINE FILES="83"; ⊃ This is the number of good files;
⊃ Now we use the magic macro to generate our tables;
DEFINE ZZ(A,B)="""A""";
PRELOAD_WITH XX;
SAFE STRING ARRAY GOOD_FILES[1:FILES];
DEFINE ZZ(A,B)="B";
PRELOAD_WITH XX;
SAFE INTEGER ARRAY MORE_EXT[1:FILES];
⊃ This routine is true if one of the common extensions for file
GOOD_FILE[I] is E;
SIMPLE BOOLEAN PROCEDURE EQUEXT(STRING E; INTEGER I);
BEGIN INTEGER J;
FOR J ← 0 STEP 1 UNTIL EXT_LENGTH DO
IF BIT(I, 1 LSH J)∧EQU(COMMON_EXT[J],E) THEN RETURN(TRUE);
RETURN(FALSE);
END;
⊃ This is the LPT output routine;
SIMPLE PROCEDURE LPTOUT(REFERENCE STRING FOO);
OUT(LPT,FOO);
⊃ This is the TTY output routine;
BOOLEAN III; ⊃ TRUE if we are on a display;
INTEGER TTY_OUT;
DEFINE TTY_MAX="25"; ⊃ Pause after this many lines if on a dpy;
SIMPLE PROCEDURE TTYOUT(REFERENCE STRING FOO);
BEGIN
IF III∧TTY_OUT≥TTY_MAX THEN
BEGIN
OUTSTR("TYPE <CR> TO CONTINE");
INCHWL;
TTY_OUT ← 0;
END;
OUTSTR(FOO);
TTY_OUT ← TTY_OUT + 1;
END;
⊃ This is the null output routine;
SIMPLE PROCEDURE NULLOUT(REFERENCE STRING FOO);
RETURN;
⊃ This routine types the commands;
SIMPLE PROCEDURE COMMANDS;
BEGIN
OUTSTR(CRLF&"COMMANDS ARE:"&CRLF);
OUTSTR("GOOD_FILES→TTY GOOD_FILES→LPT BAD_FILES→TTY BAD_FILES→");
OUTSTR("LPT DELETE_BAD_FILES"&CRLF);
OUTSTR(" 1<CR> 2<CR> 3<CR> 4<CR>");
OUTSTR(" 5<CR>"&CRLF);
END;
⊃ This routine outputs the list of good files;
SIMPLE PROCEDURE OUT_GOOD(PROCEDURE DEVICE);
BEGIN STRING FOO,Z;
INTEGER I, J;
DEVICE(Z←"GOOD FILES ARE:"&CRLF);
FOR I ← 1 STEP 1 UNTIL FILES DO
BEGIN
FOO ← GOOD_FILES[I];
IF MORE_EXT[I] THEN FOR J←0 STEP 1 UNTIL EXT_LENGTH DO
IF BIT(I,1 LSH J)∧J≠NULLIND THEN
FOO←FOO&"."&COMMON_EXT[J]&" ";
DEVICE(Z←FOO&CRLF);
END;
DEVICE(Z←CRLF);
END;
BOOLEAN BADFLG; ⊃ TRUE if OUT_BAD called;
BOOLEAN ARRAY BAD_FLAGS[1:1000];
⊃ This routine outputs the illegal file names.
It also generates a table of flags indicating the illegal files;
SIMPLE PROCEDURE OUT_BAD(PROCEDURE DEVICE);
BEGIN STRING E, F, FOO, Z;
INTEGER I, J, COUNT;
BADFLG ← TRUE;
DEVICE(Z←"ILLEGAL FILES ARE:"&CRLF);
COUNT ← 0;
FOO ← NULL;
FOR I ← 1 STEP 1 UNTIL UFDLENGTH DO
BEGIN
F ← UFD_FILE[I];
E ← UFD_EXT[I];
FOR J←1 STEP 1 UNTIL FILES DO
IF EQU(F,GOOD_FILES[J])∧EQUEXT(E,J) THEN DONE;
IF BAD_FLAGS[I] ← J>FILES THEN
BEGIN
IF COUNT≥4 THEN
BEGIN
DEVICE(Z←FOO&CRLF);
FOO ← NULL;
COUNT ← 0;
END;
FOO ← FOO&((F&(IF LENGTH(E) THEN "."&E ELSE "")&
" ")[1 FOR 12]);
COUNT ← COUNT+1;
END;
END;
DEVICE(Z←FOO&CRLF&CRLF);
END;
⊃ This routine deletes illegal files;
SIMPLE PROCEDURE DELETEX;
BEGIN BOOLEAN FLAG;
STRING E, F;
INTEGER I;
IF ¬BADFLG THEN OUT_BAD(NULLOUT);
FOR I←1 STEP 1 UNTIL UFDLENGTH DO IF BAD_FLAGS[I] THEN
BEGIN
F ← UFD_FILE[I];
E ← UFD_EXT[I];
F ← F&(IF E THEN "."&E ELSE "");
LOOKUP(DSK,F,FLAG);
IF ¬FLAG THEN RENAME(DSK,"",0,FLAG);
OUTSTR(F&(IF FLAG THEN " NOT" ELSE "")&" DELETED"&CRLF);
BAD_FLAGS[I] ← FALSE;
END;
UFDREAD; ⊃ Read new list of files;
END;
⊃ Now we get down to business;
INTEGER COM, EOF;
LABEL LOOP;
BADFLG ← FALSE;
UFDREAD;
COMMANDS;
START_CODE DEFINE TTYUUO="'51000000000";
SETOM 1;
TTYUUO 6,1;
SETZM III;
TLNE 1,'420000;
SETOM III;
END;
LOOP: OUTSTR(CRLF&"COMMAND IS ");
COM ← CVD(INCHWL);
IF COM LAND 1 THEN TTY_OUT←0 ELSE OPEN(LPT,"LPT",0,0,2,128,EOF,EOF);
CASE COM-1 OF
BEGIN
OUT_GOOD(TTYOUT);
OUT_GOOD(LPTOUT);
OUT_BAD(TTYOUT);
OUT_BAD(LPTOUT);
BEGIN
IF ¬BADFLG THEN
BEGIN
OUTSTR("WANT A LIST OF ILLEGAL FILES FIRST?"&CRLF);
IF INCHWL≠"N" THEN GO TO LOOP;
END;
DELETEX;
END;
END;
IF ¬(COM LAND 1) THEN RELEASE(LPT);
IF III THEN COMMANDS;
GO TO LOOP;
END;